# 功能和reduce一样，但是是带有初始值进行聚合的
# 而且需要注意，这个初始值在分区内、分区间进行聚合的时候都会加上
#coding:utf8
from pyspark import SparkContext,SparkConf

if __name__ == '__main__':
    conf = SparkConf().setAppName("test").setMaster("local[*]")
    sc = SparkContext(conf=conf)

    rdd = sc.parallelize([1,2,3,4,5,6,7,8,9],3)

    # 本来的值是45，但是在三个分区内聚合的初始值加上一次分区间聚合的初始值，所以需要加上4*zeroValue
    print(rdd.fold(zeroValue=1, op=lambda x, y: x + y))